import axios from 'axios'
import router from '@/router'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
  baseURL: '/api', // 所有的请求地址前缀部分
  timeout: 1000 * 60, // 请求超时时间(毫秒)
  withCredentials: true // 异步请求携带cookie
  // headers: {
  // 设置后端需要的传参类型
  // 'Content-Type': 'application/json',
  // 'token': x-auth-token',//一开始就要token
  // 'X-Requested-With': 'XMLHttpRequest',
  // },
})

// request拦截器
request.interceptors.request.use(
  (config: any) => {
    console.log('config', config)
    // 如果你要去localStor获取token,(如果你有)
    const token = localStorage.getItem('token')
    // if (token) {
    //   // 添加请求头
    //   config.headers['Authorization'] = 'Bearer ' + token
    // }
    // return config
    if (config['requestBase']) {
      // 拦截请求, 修改模型地址
      config.baseURL = config['requestBase']
    }
    if (config.url !== '/login') {
      if (token) {
        config.headers['Authorization'] = 'Bearer ' + token
      } else {
        return router
          .push({
            name: 'Login'
          })
          .then()
      }
    }
    return config
  },
  (error) => {
    // 对请求错误做些什么
    Promise.reject(error)
  }
)

// response 拦  截器
request.interceptors.response.use(
  (response) => {
    console.log('response', response)
    const res = response.data
    // 未登录时 跳转至登录页面
    if (res && res.code === 401) {
      router
        .push({
          name: 'Login'
        })
        .then()
      // return Promise.reject("当前用户未登录")
    } else if (res && res.code === 500) {
      ElMessage.error(res.msg)
      return res
    } else {
      return res
    }
  },
  (error) => {
    console.log('file: request.ts  error', error)
    const response = error.response
    const request = error.request
    if ((response && response.status === 502) || (request && request.status === 0)) {
      ElMessage.error('网络环境不稳定，请刷新重试')
    } else {
      if (response && response?.data && response?.data?.ElMessage) {
        ElMessage.error(response.data.ElMessage)
      } else if (error?.ElMessage) {
        ElMessage.error('服务出错: ' + error?.ElMessage)
      }
    }

    return Promise.reject(error)
  }
)
export default request
